﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NasuTek.Shion.Extencibility
{
    /// <summary>
    /// A Command Alias Interface is what powers commands used by /exe
    /// </summary>
    /// <remarks>
    /// NOTE: The first argument begins at 2 because 0 is always "/exe" and 1 is the alias you executed
    /// </remarks>
    /// <example>
    /// VB.NET
    /// <code>
    /// Public Class TestCommand
    ///     Implements [Alias]
    /// 
    ///     Public Sub Execute(ByVal args() As String, ByVal vars As System.Collections.Generic.Dictionary(Of String, String), ByVal ex As NasuTek.Shion.Extencibility.ExtencibilityManager) Implements NasuTek.Shion.Extencibility.Alias.Execute
    ///         MessageBox.Show("Command Successful")
    ///     End Sub
    /// End Class
    /// </code>
    /// C#
    /// <code>
    /// public class TestCommand : NasuTek.Shion.Extencibility.Alias
    /// { 
    ///     #region Alias Members
    /// 
    ///     public void Execute(string[] args, Dictionary&lt;string, string&gt; vars, NasuTek.Shion.Extencibility.ExtencibilityManager ex)<br />
    ///     {
    ///         MessageBox.Show("Command Successful");
    ///     }
    /// 
    ///     #endregion
    /// }
    /// </code>
    /// </example>
    public interface Alias
    { 
        /// <summary>
        /// Called Appon Execution of a Alias
        /// </summary>
        /// <param name="args">Argument Array</param>
        /// <param name="vars">Vars</param>
        /// <param name="ex">Extencibility Manager</param>
        /// <remarks>
        /// The vars parm contains the following keys
        /// em.activeServer = the active selected server
        /// em.activeChannel = the active selected channel
        /// </remarks>
        void Execute(string[] args, Dictionary<string, string> vars, ExtencibilityManager ex);
    }
}
